f507883cdad403f976446309a53626de1dee78ee,cdap-watchdog/src/main/java/co/cask/cdap/logging/write/LogLocation.java,LogLocation,readLogPrev,#Filter#number#number#,146

Before Change


      logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, -1);

      if (!logSegment.isEmpty()) {
        logSegments.add(logSegment);
        count = count + logSegment.size();
      }

After Change


   */
  @SuppressWarnings("WeakerAccess")
  public Collection<LogEvent> readLogPrev(Filter logFilter, long fromTimeMs, final int maxEvents) throws IOException {
    Deque<Collection<LogEvent>> logSegments = new LinkedList<>();
    int count = 0;
    try {
      try (DataFileReader<GenericRecord> dataFileReader = createReader()) {

        if (!dataFileReader.hasNext()) {
          return ImmutableList.of();
        }

        // Calculate skipLen based on fileLength
        long length = location.length();
        LOG.trace("File length {} {}", location, length);
        long skipLen = length / 10;
        if (skipLen > DEFAULT_SKIP_LEN || skipLen <= 0) {
          skipLen = DEFAULT_SKIP_LEN;
        }

        // For open file, endPosition sync marker is unknown so start from file length and read up to the actual EOF
        dataFileReader.sync(length);
        long finalSync = dataFileReader.previousSync();
        List<LogEvent> logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, -1);

        if (!logSegment.isEmpty()) {
          logSegments.addFirst(logSegment);
          count = count + logSegment.size();
        }

        LOG.trace("Read log events {} from position {}", count, finalSync);

        long startPosition = finalSync;
        long endPosition = startPosition;
        long currentSync;

        while (startPosition > 0 && count < maxEvents) {
          // Skip to sync position less than current sync position
          startPosition = skipToPosition(dataFileReader, startPosition, endPosition, skipLen);
          currentSync = dataFileReader.previousSync();
          logSegment = readToEndSyncPosition(dataFileReader, logFilter, fromTimeMs, endPosition);

          if (!logSegment.isEmpty()) {
            logSegments.addFirst(logSegment);
            count = count + logSegment.size();
          }
          LOG.trace("Read log events {} from position {} to endPosition {}", count, currentSync, endPosition);